home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-02-17 | 2.6 KB | 109 lines | [TEXT/ttxt] |
- // Made by Mikael Sterner 1997 Thanks to: Checkerboard_c.cof and hexedit :-)
-
- FillData(data)
- {
- // count
- data->SetValue(0,6.0);
- data->SetValue(1,1.0);
-
- // color 1
- data->SetValue(2,1.0);
- data->SetValue(3,0.0);
- data->SetValue(4,0.0);
-
- // color 2
- data->SetValue(5,0.0);
- data->SetValue(6,0.0);
- data->SetValue(7,1.0);
- }
-
- EditData(data)
- {
- // Make new dialog
- var d=new(SimpleDialog);
-
- // Set edit fields of dialog
- d->SetData(0,"Spiral size",FIELD_FLOAT,0.01,100000,data->GetValue(0));
- d->SetData(1,"Rotations/second",FIELD_FLOAT,-100000,100000,data->GetValue(1));
-
- d->SetData(2,"Red 1",FIELD_PERCENT,0.0,1.0,data->GetValue(2));
- d->SetData(3,"Green 1",FIELD_PERCENT,0.0,1.0,data->GetValue(3));
- d->SetData(4,"Blue 1",FIELD_PERCENT,0.0,1.0,data->GetValue(4));
-
- d->SetData(5,"Red 2",FIELD_PERCENT,0.0,1.0,data->GetValue(5));
- d->SetData(6,"Green 2",FIELD_PERCENT,0.0,1.0,data->GetValue(6));
- d->SetData(7,"Blue 2",FIELD_PERCENT,0.0,1.0,data->GetValue(7));
-
- d->SetTitle("Rotating spiral (>0 = out 0 = fixed <0 = in)");
-
- // start dialog
- if (!d->DoDialog()) return FALSE;
-
- // if sucessful copy dialog values into key data
- data->SetValue(0,d->GetData(0));
- data->SetValue(1,d->GetData(1));
-
- data->SetValue(2,d->GetData(2));
- data->SetValue(3,d->GetData(3));
- data->SetValue(4,d->GetData(4));
-
- data->SetValue(5,d->GetData(5));
- data->SetValue(6,d->GetData(6));
- data->SetValue(7,d->GetData(7));
-
- return TRUE;
- }
-
- GetOutput(data,p,n,time)
- {
- var c,c1,c2,x,y,angle,r;
-
- time = time*(data->GetValue(1)*(-1));
-
- time = time-floor(time);
-
- x = ( p.x - 0.5 ) * 2;
- y = ( p.y - 0.5 ) * 2;
-
- r = sqrt(x*x + y*y); // calculate distance from center
-
- if (x>0) {
- if (y>0) angle = atan(x/y);
- else angle = abs(atan(y/x))+(atan(1)*2);
- }
-
- if (x<0) {
- if (y<0) angle = atan(x/y)+(atan(1)*4);
- else angle = abs(atan(y/x))+(atan(1)*6);
- }
-
- if (angle!=0) angle = angle / ((atan(1))*8); // 74
-
- c1 = vector(data->GetValue(2),data->GetValue(3),data->GetValue(4));
- c2 = vector(data->GetValue(5),data->GetValue(6),data->GetValue(7));
-
- if ((angle!=0)&&(time!=0)) angle = (angle + time)-floor(angle + time);
-
- r = r*data->GetValue(0);
- if (angle!=0) r = r + angle;
- r = r-floor(r);
-
- if (r>0.5){
- c = c1;
- if ((angle==0)&&(y>0)) c=c1;
- if ((angle==0)&&(y<0)) c=c2;
- }
- else {
- c = c2;
- if ((angle==0)&&(y>0)) c=c2;
- if ((angle==0)&&(y<0)) c=c1;
- }
-
-
- return c;
- }
-
- main()
- {
- RegisterChannelShader(30444,8,"FillData","EditData","GetOutput");
- }